Analítica de datos aplicada a estudios sobre desarrollo

Introducción a los métodos cuantitativos

Sobre Mi

PhD en Estadística, MSc en Analytics & Big Data, MSc en Estadística. Con 20 años de experiencia, actual director de analítica en el CNC, miembro del comité de expertos en pobreza en el DANE y consultor de la División de Estadística de la CEPAL. Ex-decano de la Facultad de Estadística USTA, ex-director de operaciones en el ICFES, PM CEV …

Puedes encontrarme en:

Enfoque

  • Es un curso de nivel intermedio donde se abordan temas de métodos descriptivos, inferenciales, métodos supervisados y no supervisados.

  • El enfoque del curso es práctico, a través de ejercicios hechos con los estudiantes. Usaremos el software estadístico R Studio. No nos concentraremos en demostraciones y pruebas formales. El curso tiene un énfasis aplicado.

  • Sesiones de repaso y aclaración de inquietudes con el Monitor alternadas semanalmente con nuestras sesiones.

Temas que se cubren



  1. Visualización de datos
  2. Análisis exploratorio
  3. Análisis de correlación y de regresión (modelos lineales)
  4. Modelos no lineales (factores de riesgo)
  5. Reducción de la dimensionalidad
  6. Análisis clúster

Lenguajes, librerías y herramientas

SOFTWARE R

Proceso de analítica

Wickham, H. y otros (2023)

Paquete R

  • Paquete de uso libre

  • Tiene todos los métodos que necesitamos

  • Incluye paquetes específicos para la visualización como ggplot2, Plotly, esquisse, tidyplots, etc

R logo

Etapas del proceso

Paquete estadístico

Arte de Allison Horst

R y R-Studio

Arte de Allison Horst

Trabajando con R

El entorno tidyverse

Flujo de trabajo

instalación



Flujo de trabajo

Arkie Owen

Organización y proyectos en R

  • Facilita entornos colaborativos - reproducible y replicable
  • Evite la asignación de rutas de trabajo setwd(mi/ruta/)
  • Cree un R-project y solo revise getwd()
  • Organice su espacio de trabajo:

Entorno de R Studio

Hadley Wickham

Reglas de los datos



Formas básicas

  • Asignación: objeto <- valor
x <- 3*4             # Numérico
y <- "Hola a tod@s"  # Cadena
  • Funciones: Nombre_Funcion(arg1 = val1, arg2 = val2,...)
z <- seq(1, 10)      # Vector
hoy <- date()        # Fecha
  • Ayuda: help(Nombre_Funcion) o ?Nombre_Funcion
?seq
?read.csv

Importar

Hay diferentes paquetes que permiten leer y escribir diversos formatos de datos

  • haven: Stata, SPSS, SAS
  • readxl y writexl
  • arrow, data.table, …

Comandos iniciales: estructura


Existen varias formas de observar la estructura de los datos


head(tus_datos)
str(tus_datos)
length(tus_datos)
glimpse(tus_datos)
names(tus_datos)


Los comandos head, str, names son del paquete base mientras que glimpse es del entorno tidyverse.

Ejercicio

Tu turno:

  1. Cree el espacio de trabajo para Mi primer proyecto
  2. Descargue los siguientes conjuntos de datos desde el repositorio de GitHub y ubiquelos en la carpeta input/:
  • SPSS: ENSIN.sav,
  • Stata: COL_2021_LAPOP.dta,
  • Apache Parquet: violencia_intrafamiliar.parquet,
  • Excel: datos_est_ventas.xlsx
  1. Importe los conjuntos de datos a R y revise su estructura.

ORGANIZACIÓN DE DATOS

Proceso de analítica

Wickham, H. y otros (2023)

Organización de datos

Una de las maneras más sencillas de transformar, organizar y resumir los datos es usando el paquete dplyr

Organización de datos




  • dplyr es del entorno tidyverse
  • Pipeline: |> o %>%
  • Seleccionar filas: filter(condición)
  • Seleccionar columnas: select(var1, var2, ...)
  • Ordenar conjunto de datos: arrange(var) o arrange(-var)
  • Crear nuevas comunas: mutate(operación)
  • Agrupar o resumir: summarise()

Operador de tubería |>, %>%

Permite realizar varias operaciones antes de guardar el resultado en un objeto

1 |> 
  sum(2, 3)
[1] 6
25 |> 
  sqrt()
[1] 5
"Bienvenid@s" |> 
    paste("al curso de") |> 
    paste("Analítica de Datos")
[1] "Bienvenid@s al curso de Analítica de Datos"

Seleccionar filas

Allison Horst

Operadores de comparación en R

Operador Definición
< es menor que
<= es menor o igual que
> es mayor que
>= es mayor o igual que
== es exactamente igual a
!= es diferente de

Operadores lógicos en R

Operador Definición
x & y x Y y
x \| y x O y
is.na(x) x es NA (valor faltante)
!is.na(x) x no es NA
x %in% y está x en y
!(x %in% y) no está x en y

Ejemplo

Crear un subconjunto de datos desde la ENSIN con los registros de Bogotá y que sean personas de estrato 3 o menos.

library(pacman)

p_load(tidyverse, haven)

url <- "https://github.com/jgbabativam/AnaDatos/raw/main/datos/ENSIN.sav"
ensin <- read_sav(url)

#glimpse(ensin)

#-->  Filtro de registros de Bogotá y estrato menor o igual que 3

df_filt <- ensin |> 
           filter(departamento == 11 & Estrato <= 3)

nrow(df_filt)
[1] 1111

Seleccionar columnas

El verbo select(var1, var2, ...) permite conservar solo las variables de interés.


df_filt <- ensin |> 
           filter(departamento == 11 & Estrato <= 3) |> 
           select(llavehog, llaveper, region, departamento, Estrato, edad, sexo)

head(df_filt)
# A tibble: 6 × 7
  llavehog llaveper   region     departamento Estrato   edad      sexo     
  <chr>    <chr>      <dbl+lbl>  <dbl+lbl>    <dbl+lbl> <dbl+lbl> <dbl+lbl>
1 46010101 4601010103 5 [Bogotá] 11 [Bogotá]  3         32        2 [Mujer]
2 46020101 4602010104 5 [Bogotá] 11 [Bogotá]  2         13        2 [Mujer]
3 46020101 4602010105 5 [Bogotá] 11 [Bogotá]  2          6        2 [Mujer]
4 46020201 4602020103 5 [Bogotá] 11 [Bogotá]  2          0        2 [Mujer]
5 46020201 4602020105 5 [Bogotá] 11 [Bogotá]  2          0        2 [Mujer]
6 46020301 4602030103 5 [Bogotá] 11 [Bogotá]  2         16        2 [Mujer]

ANÁLISIS EXPLORATORIO

Gramática de la gráficas

La gramática de las gráficas

Requiere de al menos 3 elementos: datos, variables (aes), geometría.

ggplot(data = datos, aes(x = ___, y = ___)) +
  geom_point()

Exploración visual de datos

Arte de Allison Horst

Transformación de datos

Arte de Allison Horst

Ejemplo: Visualización de datos

Cree el proyecto: PIB

library(pacman)
p_load(tidyverse, gganimate, gapminder, gifski)

datos <- gapminder |> 
         filter(year >= 1952) |> 
         mutate(poblacion = pop / 1e6)

paises_interes <- c("Colombia", "United States", "China", "India", "Nigeria")


Explore el conjunto de datos

Ejemplo: Visualización de datos

g1 <- ggplot(datos, aes(x = gdpPercap, y = lifeExp, size = poblacion, color = continent)) +
      geom_point(alpha = 0.7, show.legend = TRUE) +
      geom_text(data = datos |> filter(country %in% paises_interes), 
                aes(label = country), size = 4, vjust = -1, hjust = 0.5, color = "black", alpha = 0.8) +
      scale_x_log10(labels = scales::dollar_format(prefix = "$")) +
      scale_y_continuous(labels = scales::comma) +
      labs(title = "Relación entre PIB per cápita y la esperanza de vida",
           subtitle = "Año: {frame_time}",
           x = "PIB per cápita (log10)",
           y = "Esperanza de vida",
           size = "Población (millones)",
           color = "Continente") +
       theme_minimal(base_size = 14) +
       theme(legend.position = "bottom") +
       transition_time(year) +
       ease_aes('linear')

#anim <- animate(plot, fps = 20, duration = 10, width = 800, height = 600, renderer = gifski_renderer())
#anim_save("gapminder_animation.gif", anim)

Nuestros conjuntos de datos

Durante el curso se usarán conjuntos de datos reales, descargados de portales de datos abiertos del DANE, DNP, FGN y otros.

Ejercicio

Considere los datos de violencia intrafamiliar, descargados de los datos abiertos de la FGN. Realice:

  1. Cargue el conjunto de datos que se encuentra en formato .parquet
  2. Explore las variables y cantidad de registros
  3. Use los comandos table() y del paquete dplyr() para indentificar cuantos casos están con estado de activo
  4. ¿Cuál es el departamento con el mayor número de víctimas?
  5. ¿Es correcto comparar los departamentos según el número de víctimas?
  6. ¿Cuántas víctimas se han registrado por año?, compare por sexo y por edad.
  7. Haga un análisis con enfoques diferenciales según las variables de LGBTI, NNA, indígena y Afrodescendiente

Ejercicio


Tu turno: Cree un proyecto y cargue el conjunto de datos “ENSIN.sav”, explore los datos y visualice su estructura. Use as_factor() para visualizar las etiquetas.

library(pacman)

p_load(tidyverse, haven, skimr)

url <- "https://github.com/jgbabativam/AnaDatos/raw/main/datos/ENSIN.sav"
ensin <- read_sav(url)
15:00

La etapa de la frustración

Arte de Allison Horst

La IA como herramienta

Estamos en un mundo de constante evolución, ¿la IA nos va a reemplazar?

  • Enviar una carta en papel por correo
  • Pedir un domicilio por teléfono
  • Solicitar un taxi por teléfono
  • Orientarse en una ruta con un mapa de papel



@tiangolo

Imagen de Caracol Radio

GPT y Modelos LLMs

El GPT (Generative Pre-trained Transformer) es un modelo de LLM (Large Language Model). Mientras que GPT-3 usaba 175 MM de parámetros usando modelos soportados en texto, GPT-4 usa 100 BN de parámetros usando modelos soportados en texto e imágenes.

Instrucciones

No pretenda que todo ocurra en un solo paso, a veces se obtienen mejores resultados precisando un prompt en cada paso.

@mdancho84

Herramientas

Ejemplo

Escriba el siguiente prompt en ChatGPT y transcriba el código a R:



“use el paquete osm de R para crear un mapa y la base de datos de droguerias en bogotá, luego use mapview para visualizar las droguerias”

Ejercicio


Tu turno: Sobre el conjunto de datos “ENSIN.sav”, apoyese en la IA para obtener un gráfico de barras, usando ggplot2, con la cantidad de registros que se tienen de cada región. Ajustelo a su gusto.

g2 <- ensin |> 
      count(region) |> 
      mutate(region = as_factor(region)) |>
      ggplot(aes(x = fct_reorder(region, n), y = n, fill = region)) +
      geom_col() +
      labs(x = "Región", y = "Frecuencia") +
      coord_flip() +
      theme_minimal() +
      theme(legend.position = "none")

Ejercicio


Tu turno: Sobre el conjunto de datos “ENSIN.sav”, apoyese en la IA para obtener un gráfico elegante entre las variables Peso y Estatura, use ggplot2. Ajustelo a su gusto.

Ejercicio


Tu turno: Sobre el conjunto de datos “ENSIN.sav”, apoyese en la IA para obtener un diagrama de cajas elegante que permita comparar la variable IMC entre las diferentes regiones, use ggplot2. Ajustelo a su gusto.

ANÁLISIS EXPLORATORIO

Análisis exploratorio



  1. Tipos de variables.
  2. Visualizar los datos
  3. Identificar relaciones
  4. Datos atípicos
  5. Datos faltantes

Análisis exploratorio

Usemos un conjunto de datos de la ENSIN

library(pacman)
p_load(tidyverse, broom, modelr, 
       patchwork, performance, haven,
       DataExplorer, skimr, corrplot, psych, gt, gtsummary)

url <- "https://github.com/jgbabativam/AnaDatos/raw/main/datos/ENSIN.sav"
ensin <- read_sav(url)

Analice los descriptivos del peso y de la estatura: media, mediana, percentiles, sd y correlación. Use tapply(var, class, fun) para identificar la región con menor IMC. Explore los comandos create_report(), glimpse() y skim().

create_report(ensin)
glimpse(ensin)
skim(ensin)

ESTUDIO DE CASO

Violencia contra las mujeres

El estudio de Oxfam y La Casa de la Mujer publicado aquí. La investigación se realizó en el marco de la Campaña “Violaciones y otras Violencias: Saquen mi cuerpo de la guerra”. El estudio se enfocó en zonas donde se tenían alertas tempranas de la Defensoría del Pueblo y tuvo como periodo de referencia los años 2010 a 2014.

library(pacman)

p_load(tidyverse, haven, skimr, DataExplorer, janitor)

url <- "https://github.com/jgbabativam/AnaDatos/raw/main/datos/VolenciaMujer.sav"
mujeres <- read_sav(url) |> as_factor()

  • Use lapply(mujeres, function(x) attributes(x)$label) para ver las etiquetas de las preguntas.
  • Use create_report para hacer un análisis exploratorio de los datos.

Reportes reproducibles usando Quarto-R


A schematic representing the multi-language input (e.g. Python, R, Observable, Julia) and multi-format output (e.g. PDF, html, Word documents, and more) versatility of Quarto.

Arte de “Hello, Quarto” por Julia Lowndes y Mine Çetinkaya-Rundel, presentado en RStudio::Conf(2022). Ilustración por Allison Horst.

A schematic representing rendering of Quarto documents from .qmd, to knitr or jupyter, to plain text markdown, then converted by pandoc into any number of output types including html, PDF, or Word document.

Tipos de salidas

Sitios para obtener inspiración Quarto.org gallery y el Qmd Club website & blog showcase

Estructura de un documento .qmd

  1. YAML header (metadatos y opciones del documento)

  2. Narrativa (markdown)

  3. Códigos chunks (importar, depurar, transformar, visualizar)

1. YAML

---
title: Título del documento
author: Giovany Babativa-Márquez
date: "r toupper(format(Sys.time(), '%B %Y'))"
bibliography: docreferences.bib
link-citations: true
toc-title: Tabla de Contenido
lang: es
output:
  bookdown::word_document2:
   reference_docx: docPlantilla.docx
   number_sections: true
   fig_caption: yes
fontsize: 12pt
---

Consulte las opciones disponibles en las guías de referencia: HTML, PDF, MS Word, Revealjs, MS Powerpoint.

2. Narrativa

Sintaxis de Markdown para:

  • Texto con formato: **negrita**negrita

  • Título de secciones: # Header 1, # Header 2

  • Hipervínculos: [google.com](https://google.com)google.com

  • Imágenes: ![](image.png)

  • Código en línea: `{r} Sys.Date()`2025-08-09

  • Ecuaciones: `$E = mc^{2}$`\(E = mc^{2}\)


3. Códigos chunks

Tres manera para insertar chunks:

  1. Atajos Cmd/Ctrl + Option/Alt + I.

  2. Insert Chunk button in RStudio Insert Chunk botón en las herramientas del editor.

  3. Escribir los delimitadores de fragmento ```{r} y ```.

Dos formas de ejecutar los códigos de los chunks:

  1. Use los botones Run Current Chunk o Run All Chunks Above.

    Code chunk in RStudio with the Run All Chunks Above and Run Current Chunk buttons highlighted and labelled.

  2. Ejecutar el código actual del chunk con Cmd/Ctrl + Shift + Enter.

Ejemplo

Use el conjunto de datos de violencia contra las mujeres para construir un informe de muestra, incluya:

  • Secciones y subsecciones
  • Texto con formato (Negrita)
  • Hipervínculo
  • Referencias
  • Gráficos
  • Tablas
  • Ecuaciones

ESTUDIO DE CASO

Informe de violencia contra las mujeres

Pasos previos

  1. Descargue la plantilla aquí

  2. Cree un proyecto en una ruta de su computadora: data, src

  3. Descomprima el archivo template.zip en src.

  4. Abra el archivo .Rprj y el archivo .qmd o Rmd.

Informe de violencia contra las mujeres

Introducción

  1. Ajuste el título, autores y guarde con otro nombre.

  2. Cargue el conjunto de datos. Use Ctrl + Alt + I

url <- "https://github.com/jgbabativam/AnaDatos/raw/main/datos/VolenciaMujer.sav"
mujeres <- read_sav(url) |> as_factor()
  1. Escriba el siguiente texto en la introducción y agregue una referencia.

La violencia sexual es una grave violación de los derechos humanos que afecta a personas de todas las edades, géneros y contextos socioeconómicos. Este fenómeno abarca una amplia gama de conductas que van desde el abuso verbal hasta agresiones físicas, y tiene profundas consecuencias físicas, emocionales y psicológicas para las víctimas.

Abordar la violencia sexual requiere un enfoque integral que considere tanto la prevención como la atención a las víctimas (REFERENCIA). Las políticas públicas, la educación sobre el consentimiento y el acceso a servicios de salud mental y justicia son pilares fundamentales para mitigar sus efectos y reducir su prevalencia.

Esta investigación se basa en `{r nrow(mujeres)}` encuestas y permite cuantificar la prevalencia de la violencia sexual en zonas de conflicto armado, medida a partir de 8 formas de violencia.

quitar las llaves

Informe de violencia contra las mujeres

Análisis descriptivo y exploratorio

  1. Haga una sección corta con un análisis exploratorio, incluya:

3.1 Una tabla con el número de encuestas por departamento, agregue un título y cite en el documento usando \@ref(tab:tab1).

tab1 <- mujeres |> 
  count(DPTO, name = "Encuestas") |> 
  arrange(-Encuestas) |> 
  adorn_totals() |> 
  rename(Departamento = DPTO)

custom_tab(tab1)

3.2 Agregue una gráfica y use \@ref(fig:f1) para citarla. Apóyese en la IA.

  1. Complemente el análisis descriptivo y exploratorio en casa.

GRACIAS!

Referencias

  • R for data science. Section 3. Data visualization. Disponible aquí

  • Dougherty, J. and Ilyankou, I. (2022) Hands-On Data Visualization. Interactive Storytelling from Spreadsheets to Code. Section 6. Chart Design Principles. Disponible aquí

  • Williams, G. (2022) Data Science Desktop Survival Guide. Togaware. Disponible aquí Chapter 2 introducing R

  • Jadey Ryan. Reproducible reports and presentations with Quarto. Disponible aquí

Citación y derechos de autor

Este material ha sido creado por Giovany Babativa-Márquez y es de libre distribución bajo la licencia Creative Commons Attribution-ShareAlike 4.0.

Si se copia parcial o totalmente, debe citar la fuente como:

Babativa-Márquez, J.G. Materiales del curso de Analítica de Datos. URL: https://github.com/jgbabativam/AnaDatos.